const express = require("express")

const app = express() //创建网站服务器
var cors = require('cors')
var session = require('express-session')
const MongoStore = require('connect-mongo')(session);

// 导入验证是否登陆的中间件
const { loginMiddle } = require("./middleWare/login")

//配置跨域 ,要配置在路由前
app.use(cors())

var bodyParser = require("body-parser") //引入

//配置body-parser插件
app.use(bodyParser.urlencoded({ extended: false }))//这是解析表单的
app.use(bodyParser.json())    //这是解析json格式的


// session 保存在服务端内存中
// 使用 session 中间件，必须写到路由前
app.use(session({
    secret: 'secret', // 对session id 相关的cookie 进行签名
    name: 'session_id',  // 返回前端时的名字,可以不配置
    resave: true,           // 强制保存session
    saveUninitialized: false, // 是否保存未初始化的会话
    cookie: {
        maxAge: 1000 * 60 * 60 * 24 * 1, // 设置 session 的有效时间1天，单位毫秒
    },
    rolling: true,         // 每次请求都会重置session过期时间，默认false
    store: new MongoStore({      // 配置持久化保存 会自动创建一张sessions的表 过期后自动删除
        url: 'mongodb://127.0.0.1:27017/session_monban',
        // touchAfter: 60*60*1000*7  // 每次请求都会重置session过期时间，这个不推荐设置
    })
}));

app.use((req, res, next) => {
    // 给模板统一绑定数据  
    // console.log(req.session.user)
    app.locals.userdata = req.session.user
    next()
})

//引入路由模块
const login = require("./code/login")
const home = require("./code/home")


//登录，注册匹配路由
app.use("/login", loginMiddle, login) 

//登录拦截 所以必须写在需要拦截的路由前面
app.use("*", (req, res, next) => {
    let username = req.session.user
    if (username == undefined) {
        res.send({
            message: "请登录",
            status: 304
        })
    } else {
        console.log(req.session.username)
        next()
    }
})



//为路由匹配路径
app.use("/home", home)


// 错误请求
app.use((req, res, next) => {   //配置没有
    res.status(500).json({
        code: 500,
        message: "没有这个api"
    })
})

let port = 3000
app.listen(port, () => {
    console.log(`http://localhost:${port}`)
})